package com.yuan.yblog.crud.mybatisGenerator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author hepeiyuan on 2024/5/12 11:19
 * @description 交互式生成
 */
public class InteractiveGeneration {
    public static void main(String[] args) {
        FastAutoGenerator.create(MysqlConfig.mysqlURL,
                        MysqlConfig.USERNAME,
                        MysqlConfig.PASSWORD)
                /*全局配置*/
                .globalConfig((scanner, builder) -> {
                    builder.fileOverride() /*覆盖已生成文件*/
                            .disableOpenDir()/*禁止打开输出目录*/
                            .author("hepeiyuan")
                            .dateType(DateType.ONLY_DATE) /*指定时间策略*/
                            .outputDir(".\\yblog-crud\\src\\main\\java"); /*指定输出目录*/
                })
                /*包配置*/
                .packageConfig((scanner, builder) -> {
                    builder.parent("com.yuan.yblog") /*设置父包名*/
                            .moduleName("crud"); /*设置父包模块名*/
                })
                /*策略配置*/
                .strategyConfig((scanner, builder) -> {
                    builder.addInclude(getTables(scanner.apply("请输入表名（多个请用英文逗号分隔）。若要生成所有表则输入 all")))
                            .build();
                })
                /*模板配置*/
                .templateConfig(builder -> {
                    /*实体类模板*/
                    builder
                            .entity("entity.java")
                            .service("service.java")
                            .serviceImpl("serviceImpl.java")
                            .mapper("mapper.java")
                            .mapperXml("mapperXml.xml")
                            // 以下文件不生成。todo: generator使用前请修改，使用后复原
                            .disable(TemplateType.CONTROLLER)
                            .disable(TemplateType.ENTITY)
                            .disable(TemplateType.MAPPER)
                            .disable(TemplateType.XML)
                            .disable(TemplateType.SERVICE)
                            .disable(TemplateType.SERVICEIMPL)
                    ;
                })
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}
